package team.se.tms.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;
import team.se.tms.dto.ParameterMap;
import team.se.tms.vo.Result;

import javax.servlet.http.HttpServletRequest;

/**
 * 控制层基类，定义并实现了一些通用方法
 *
 * @author winkyle
 * @date 2018/11/6
 */
@Slf4j
public abstract class BaseController {


    private static final long serialVersionUID = 6357869213649815390L;
    /**
     * @deprecated  这个modelMap有一点bug，建议废弃
     */
    protected ModelMap modelMap;

    /**
     *
     * 被@ModelAttribute注释的方法会在此controller每个方法执行前被执行，因此对于一个controller映射多个URL的用法来说，要谨慎使用。
     * 我们编写控制器代码时，会将保存方法独立成一个控制器也是如此。
     *
     * @param modelMap modelMap 生命周期只在page域的map
     * @create on 2018/11/21 by winkyle
     */
    @ModelAttribute
    private void setModelMap(ModelMap modelMap) {
        this.modelMap = modelMap;
    }

    /**
     * @deprecated  这个modelMap有一点bug，建议废弃
     * 给界面传值
     *
     * @param result 要传的值
     * @create on 2018/11/21 by winkyle
     */
    public void setPageData(Result result) {
        modelMap.put("pageData",result);
    }

    /**
     * 创建一个ModelAndView
     *
     * @return ModelAndView
     * @create on 2018/11/29 by winkyle
     */
    public ModelAndView getModelAndView(){
        return new ModelAndView();
    }

    /**
     * 创建一个ParameterMap
     *
     * @return 一个 {@link ParameterMap}
     * @create on 2018/11/6 by winkyle
     */
    public ParameterMap getParameterMap() {
        return new ParameterMap();
    }

    /**
     * 创建一个ParameterMap
     *
     * @return 一个初始化了客户端请求信息的 {@link ParameterMap}
     * @create on 2018/11/6 by winkyle
     */
    public ParameterMap getParameterMap(HttpServletRequest request) {
        return new ParameterMap(request);
    }
}
